package com.hliushi.mp.config;

import com.hliushi.mp.intercept.MyMvcInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @ClassName MyInterceptorConfig
 * @Description 配置我们自定义的拦截器
 * @Author liushi
 * @Date 2021/7/8 19:59
 * @Version V1.0
 **/
@Configuration
public class MyInterceptorConfig implements WebMvcConfigurer {

    /**
     * auth-client 中的拦截器需要排除拦截的地址
     */
    String[] urls = {
            "/error",
            "/login",
            "/v2/api-docs",
            "/v2/api-docs-ext",
            "/swagger-resources/**",
            "/webjars/**",
            "/",
            "/csrf",
            "/META-INF/resources/**",
            "/resources/**",
            "/static/**",
            "/public/**",
            "classpath:/META-INF/resources/**",
            "classpath:/resources/**",
            "classpath:/static/**",
            "classpath:/public/**",
            "/cache/**",
            "/swagger-ui.html**",
            "/doc.html**"
    };

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyMvcInterceptor())
                .addPathPatterns("/**")
                // 这个排除路径, 配置了可以过滤 swagger中的  uiConfiguration / swaggerResources 方法
                .excludePathPatterns(urls);

        // 没有配置 excludePathPatterns(urls) 排除路径 拦截器打印的日志内容
        //
        // c.hliushi.mp.intercept.MyMvcInterceptor  : ==== 拦截到了方法: uiConfiguration, 在该方法执行之前 ====
        // c.hliushi.mp.intercept.MyMvcInterceptor  : ==== 拦截到了方法: swaggerResources, 在该方法执行之前 ====
        // c.hliushi.mp.intercept.MyMvcInterceptor  : 执行完方法之后进执行(Controller方法调用之后), 但是此时还没进行视图渲染
        // c.hliushi.mp.intercept.MyMvcInterceptor  : 整个请求都处理完咯, DispatcherServlet也渲染了对应的视图咯, 此时我们可以一些清理的工作了
        // c.hliushi.mp.intercept.MyMvcInterceptor  : 执行完方法之后进执行(Controller方法调用之后), 但是此时还没进行视图渲染
        // c.hliushi.mp.intercept.MyMvcInterceptor  : 整个请求都处理完咯, DispatcherServlet也渲染了对应的视图咯, 此时我们可以一些清理的工作了
        // c.hliushi.mp.intercept.MyMvcInterceptor  : ==== 拦截到了方法: error, 在该方法执行之前 ====
        // c.hliushi.mp.intercept.MyMvcInterceptor  : 执行完方法之后进执行(Controller方法调用之后), 但是此时还没进行视图渲染
        // c.hliushi.mp.intercept.MyMvcInterceptor  : 整个请求都处理完咯, DispatcherServlet也渲染了对应的视图咯, 此时我们可以一些清理的工作了

        // 调用 接口WebMvcConfigurer的默认方法
        WebMvcConfigurer.super.addInterceptors(registry);
    }

    /**
     * 由于使用WebMvcConfigurer, 这个资源路径不需要指定
     * 自定义静态资源映射目录
     * 添加静态资源文件, 外部可以直接访问地址
     * #
     * 如果继承了WebMvcConfigurationSupport
     * 则在yml中配置的mvc相关配置会失效, 需要重新指定静态资源
     * #
     * @param registry
     */
    // @Override
    // protected void addResourceHandlers(ResourceHandlerRegistry registry) {
    //     // LIST.forEach(item -> registry.addResourceHandler(item));
    //     registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
    //     // swagger的静态资源路径前缀是 /META-INF/resources
    //     // addResourceHandler:  指的是对外暴露的访问地址
    //     // addResourceLocations:指的是内部文件放置的目录
    //     registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
    //     registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
    //     registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    //     super.addResourceHandlers(registry);
    // }

}
